简评:程序员的工作不是写代码,而是解决问题。成为高级工程师后,如果不做管理者,你还能做什么呢?你做程序员已经有好几年并且已经晋升过一两次,最终升任了高级工程师或一些其他的同等职位,在此之前,你的职业道路简单明了:你学会如何独立工作,然后一步步升任为高级工程师。
现在的你开始思考自己职业生涯的下一步是什么,如果你还没有明确的规划,问自己几个问题:
- 你是否成为了一个管理者且不再编程?
- 仅仅学习新技术,你是否觉得不够?
- 你的目标是什么?
本文我想提出一个职业发展的替代方案,一个能给你更多自主权和讨价还价能力的替代方案。与成为管理者不同的是,它仍然允许你编程。
从写代码到解决问题
作为程序员的工作到最后是解决问题,而不是编写代码,解决问题需要这些步骤:
- 发现和确认问题
- 提出解决方案
- 实施解决方案
这里面的每一个都可以被认为是一种技能树:一组可以单独和并行开发的相关技能。但是在实践中,你通常会从使用第三个技能树开始,在变得更有经验的时候,才逐个添加其他技能。
Randall Koutnik 把这些描述为一种职业头衔,一个职业发展走向:实施者、解决者和发现者。
作为实施者,你是一名没有经验的程序员,你的任务由其他人定义:你只需实现小的、明确指定的代码块。
假设一下,你在一家为养宠物的人搭建网站的公司工作。你在上班的时候会接收到一个任务:“在这里添加一个下拉菜单,列出所有的鬣蜥疾病,你可以从 IGUANA_DISEASE 表中获取这些疾病。选择一个菜单项应重定向到适当的页面。”
你不知道用户为什么会需要列出鬣蜥疾病,也不必花费太多时间来弄清楚如何实现它,照吩咐去做就行了。
当你变得更有经验时,你就成了一个解决者:你能够为不太明确的问题想出解决方案。
当你遇到一个问题:“我们需要在网站上添加一个部分,让宠物主人知道自己的宠物是否生病了。”你先获悉自己拥有什么数据,可以使用哪些 API,然后与设计师一起设计 UI,创建一个实现计划,最后编写代码。
最终你会成为一个发现者:你开始自己发现问题并找出其根本原因。
你会去和你的经理谈鬣蜥:几乎没人拥有鬣蜥,为什么它们在页面上和猫狗有一样的空间?更不用说给鬣蜥编写特定的代码,这完全是在浪费时间,难道不是应该编写适用于所有动物的通用代码吗?
经过一番讨论,你发现必须重做网站架构、业务逻辑和设计,这样就不必在每次添加新动物的时候都编写新代码。如果你提出正确的架构,使得添加一个新的动物只需要花一个小时,公司就可以以低成本服务于许多动物利基市场。你将与整个团队一起合作完成解决方案的设计和实施。
成为发现者的好处
许多程序员最终停留在解决者这个角色,不知道下一步该做什么。如果你不做管理,那么成为一个发现者是一个很好的选择,原因有两点:自主性和生产力。
Kutnk 的主要观点是,这三个阶段每走向下一步都会给你更多的自主权。作为实现者,几乎没有自主权,作为解决者,会拥有稍多的自主权,作为发现者,你拥有非常多的自主权:你被赋予一些模糊的目标和约束,由你自己来决定做什么。这会带来很多乐趣。
除此之外,还有一个好处:从 Implementer 到 Solver 再到 Finder,你将变得更有生产力,因为你所做的不必要的工作变得更少。
- 如果你只是在执行别人指定的解决方案,可能会陷入低效的工作。
- 如果你只看到问题的表面就提出一个解决方案,那最终解决的可能不是真正的问题。
你越擅长诊断和发现潜在的问题,提出解决方案,并与他人一起工作,你就越少做不必要的工作,你就会更有效率。
利用你的生产力
如果你是一个发现者,你的工作效率就会大大提高,这会让你成为一个更有价值的员工。擅长挖掘高价值问题的人能发现那些无人知晓的障碍,发现客户真正想要的东西,你会成为他们中的一员。
这意味着你有更多的谈判优势:
- 协商加薪更容易成功。
- 可以找到更好的工作,即使这个工作涉及到你不了解的技术。
- 甚至可以申请为期三天的周末。
因此,如果你想在继续编程的同时事业上也取得进步,就从现在开始去寻找问题吧。一旦专门去注意这件事情,你会发现问题无处不在。
英文原文:The next career step for Senior Software Engineers (that isn’t management)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。